// Package _4__I__剪绳子 main
// @Title _4__I__剪绳子
// @Description
// @Author  == 琳琳也叫王木木 ==  2022-02-14 15:03
// @Create  2022-02-14 15:03
package main

import "fmt"

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func cuttingRope(n int) int {
	//定义dp数组，dp[i]表示长度为i的绳子剪成m端后长度的最大乘积(m>1)
	dp := make([]int, n+1)
	// 初始化
	dp[2] = 1
	// 目标：求出dp[n]
	// dp[2]已经已知，从dp【3】开始求，直到求出dp[n]
	for i := 3; i <= n; i++ {
		//首先对绳子剪长度为j的一段,其中取值范围为 2 <= j < i
		for j := 2; j < i; j++ {

			//转移方程如下
			dp[i] = max(dp[i], max(j*(i-j), j*dp[i-j]))
			//Math.max(j*(i-j),j*dp[i-j]是由于减去第一段长度为j的绳子后，可以继续剪也可以不剪
			//Math.max(dp[i],Math.max(j*(i-j),j*dp[i-j]))是当j不同时，求出最大的dp[i]
		}
	}
	return dp[n]
}

func main() {
	fmt.Println(cuttingRope(10))
}
